#!/bin/bash

NOM_INSTULA=$0 # nombre de este programa

# Finaliza el programa INSTULA mostrando el mensaje que corresponda 
# (instalación completa si tuvo éxito, e incompleta si no lo tuvo).
# Parámetro: código de error (0 = éxito, otro = fracaso) 
function fin() {
    if [ $1 == 0 ]
    then
        echo "***************************************************************"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
        echo "* FIN del Proceso de Instalación de Postulantes               *"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
        echo "*      Copyright TPSistemasOp (c)2011                         *"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
        echo "***************************************************************"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
        echo "Presione ENTER para salir"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
        rm -f temp #elimina el archivo temporal que se usó para poder emitir mensajes en stdout y loguear con gralog al mismo tiempo
        read varfin
        exit 0
    else
        echo "Proceso de instalación cancelado."|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" E;cat temp
        rm -f temp #elimina el archivo temporal que se usó para poder emitir mensajes en stdout y loguear con gralog al mismo tiempo
        exit 1
    fi
}

###### CHEQUEO DE LA RUTA DE INSTULA ######
#PRECONDICIÓN: se está en el directorio grupo09 o un directorio hijo del mismo
    checkpath=`pwd|grep "/grupo09"` #si no encuentra esto, no se está en el path correcto

    if [ -z "$checkpath" ]
    then
        echo "Este programa no está en el directorio correspondiente al grupo. Por favor, lea la documentación."|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" SE;cat temp
        fin 1
    fi

    gruposlash=`pwd|sed 's-grupo09/.*-grupo09-'`; # si el directorio actual no es grupo09 sino uno de sus hijos, $grupo debe ser la ruta hasta grupo09

    if [ "$gruposlash" == "`pwd`" ]
    then
        grupo=`pwd` # si no matcheó ninguna barra despues de grupo09, debo estar en grupo09 
    else
        grupo=$gruposlash
    fi
###########################################

NOM_POSTINI="postini.sh" # nombre del programa POSTINI
NOM_POSTONIO="postonio.sh" # nombre del programa POSTONIO
NOM_POSTULAR="postular.sh" # nombre del programa POSTULAR
NOM_POSTLIST="PLIST.PL" # nombre del programa PLIST.PL
NOM_MOVER="mover.sh" # nombre del programa mover
NOM_GRALOG="gralog.sh" # nombre del programa gralog
NOM_START="startp.sh" # nombre del programa start
NOM_STOP="stopp.sh" # nombre del programa stop

CONFDIR="$grupo/conf"

CONFFILE="$CONFDIR/Instula.conf" # ruta del archivo de configuración que genera INSTULA

BINDIR="bin" # directorio para binarios
ARRIDIR="arribos" # directorio para archivos de arribos
DATASIZE=100 # tamaño mínimo del directorio de arribos (MB)

LOGDIR_REAL="log" # directorio para logs (excepto instula.log), se grabará finalmente como LOGDIR en la configuración
LOGEXT_REAL=".log" # extensión de los archivos de log (excepto instula.log), se grabará finalmente como LOGEXT en la configuración
LOGSIZE=400 # tamaño máximo del log (KB)

export LOGDIR="$CONFDIR" # directorio para log de INSTULA (gralog necesita esta variable)
export LOGEXT=".log" # extensión del archivo de log de INSTULA (gralog necesita esta variable)
export MAXLOGSIZE=100 # tamaño en KB máximo para el el log de INSTULA

LOGFILE="$LOGDIR/${NOM_INSTULA}${LOGEXT}" # ruta del archivo de log de INSTULA

USERID=`whoami` # nombre del usuario
DATE= # variable para guardar la fecha de instalación 


# Inicializa conf/instula.log
function init_log() {
    if [ -f "$LOGFILE" ]
    then
        ./$NOM_MOVER $LOGFILE $CONFDIR
    fi

    ./gralog.sh "$NOM_INSTULA" "Inicio de instalación." I
}

# Comprueba que POSTULA no se encuentre instalado completa o parcialmente con
# anterioridad
function verif_instalacion_previa() {
    ERR_POSTINI=0;
    ERR_POSTONIO=0;
    ERR_POSTULAR=0;
    ERR_POSTLIST=0;
    if [ -r "$CONFFILE" ]
    then
        BINDIR=`grep "^BINDIR" "$CONFFILE" | sed 's/BINDIR[\ ]*\=[\ ]*\(.*\)/\1/'`;
        
        RUTA_POSTINI="$BINDIR/$NOM_POSTINI"; 
        if [ -x "$RUTA_POSTINI" ]
        then
            ERR_POSTINI=1
        fi

        RUTA_POSTONIO="$BINDIR/$NOM_POSTONIO";
        if [ -x "$RUTA_POSTONIO" ]
        then 
            ERR_POSTONIO=1
        fi

        RUTA_POSTULAR="$BINDIR/$NOM_POSTULAR";
        if [ -x "$RUTA_POSTULAR" ]
        then 
            ERR_POSTULAR=1
        fi

        RUTA_POSTLIST="$BINDIR/$NOM_POSTLIST";
        if [ -x "$RUTA_POSTLIST" ]
        then 
            ERR_POSTLIST=1
        fi

        ERRORES=`expr $ERR_POSTINI + $ERR_POSTONIO + $ERR_POSTULAR + $ERR_POSTLIST` 
        if [ $ERRORES -eq 4 ] 
        then 
            error_preinstalado
        elif [ $ERRORES -gt 0 ]
        then
            error_preinstincompleta $ERR_POSTINI $ERR_POSTONIO $ERR_POSTULAR $ERR_POSTLIST
        fi
    fi
}

# Muestra mensaje de error indicando que POSTULA ya se encuentra instalado
function error_preinstalado() {
    USERID=`grep "^USERID" $CONFFILE|cut -f2 -d'='|sed 's/[\ ]*\(.*\)/\1/'`
    DATE=`grep "^FECINS" $CONFFILE|cut -f2 -d'='|sed 's/[\ ]*\(.*\)/\1/'`
    echo "***************************************************************"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" E;cat temp
    echo "* Proceso de Instalación del Sistema Postulantes              *"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" E;cat temp
    echo "*        Copyright TPSistemasOp (c) 2011                      *"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" E;cat temp
    echo "***************************************************************"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" E;cat temp
    echo "* Se encuentran instalados los siguientes componentes:        *"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" E;cat temp
    echo "* POSTINI $DATE $USERID                                     *"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" E;cat temp
    echo "* POSTONIO $DATE $USERID                                    *"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" E;cat temp
    echo "* POSTLIST $DATE $USERID                                    *"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" E;cat temp
    echo "* POSTULAR $DATE $USERID                                    *"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" E;cat temp
    echo "***************************************************************"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" E;cat temp
    fin 1
}

# Muestra mensaje de error indicando que se encontraron componentes de POSTULA
# instalados, pero no todos
function error_preinstincompleta() {
    INST_POSTINI=$1
    INST_POSTONIO=$2
    INST_POSTULAR=$3
    INST_PLIST=$4
    USERID=`grep "^USERID" $CONFFILE|cut -f2 -d'='|sed 's/[\ ]*\(.*\)/\1/'`
    DATE=`grep "^FECINS" $CONFFILE|cut -f2 -d'='|sed 's/[\ ]*\(.*\)/\1/'`
    echo "***************************************************************"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" E;cat temp
    echo "* Proceso de Instalación del Sistema Postulantes              *"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" E;cat temp
    echo "*        Copyright TPSistemasOp (c) 2011                      *"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" E;cat temp
    echo "***************************************************************"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" E;cat temp
    
    echo "* Se encuentran instalados los siguientes componentes:        *"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" E;cat temp
    if [ $INST_POSTINI -eq 1 ]
    then
        echo "POSTINI $DATE $USERID"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" E;cat temp
    fi
    if [ $INST_POSTONIO -eq 1 ]
    then
        echo "POSTONIO $DATE $USERID"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" E;cat temp
    fi
    if [ $INST_POSTULAR -eq 1 ]
    then
        echo "POSTULAR $DATE $USERID"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" E;cat temp
    fi
    if [ $INST_PLIST -eq 1 ]
    then
        echo "POSTLIST $DATE $USERID"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" E;cat temp
    fi
    
    echo "* Falta instalar los siguientes componentes:                  *"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" E;cat temp
    if [ $INST_POSTINI -eq 0 ]
    then
        echo "* POSTINI                                                     *"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" E;cat temp
    fi
     if [ $INST_POSTONIO -eq 0 ]
    then
        echo "* POSTONIO                                                    *"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" E;cat temp
    fi   
    if [ $INST_POSTULAR -eq 0 ]
    then
        echo "* POSTULAR                                                    *"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" E;cat temp
    fi
    if [ $INST_PLIST -eq 0 ]
    then
        echo "* POSTLIST                                                    *"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" E;cat temp
    fi
    
    echo "* Elimine los componentes instalados e inténtelo nuevamente. *"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" E;cat temp
    echo "***************************************************************"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" E;cat temp
    fin 2
}

# Pide confirmación de aceptación del acuerdo de licencia
function licencia() {
    echo "***************************************************************"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
    echo "* Proceso de Instalación del Sistema Postulantes              *"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
    echo "*        Copyright TPSistemasOp (c) 2011                      *"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
    echo "***************************************************************"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
    echo "* Al instalar POSTULA UD. expresa estar en un todo de acuerdo *"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
    echo "* con los términos y condiciones del \"ACUERDO DE LICENCIA DE  *"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
    echo "* SOFTWARE\" incluido en este paquete.                         *"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
    echo "***************************************************************"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
    echo|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
    echo "¿Acepta los términos y condiciones? (S/N)"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp

    acept="a"
    while [ "$acept" != "S" ] && [ "$acept" != "N" ]
    do
        read acept;
        ./gralog.sh "$NOM_INSTULA" "$acept" I
        if [ "$acept" != "S" ] && [ "$acept" != "N" ]
        then
            echo "Debe ingresar S o N."|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
        fi
    done
    if [ "$acept" == "S" ]
    then
        echo
        echo
    else
        fin 1
    fi
}


# Chequea que Perl 5 o superior se encuentre instalado
function perlchk() {
    mypath=`echo $PATH|sed 's/:/ /g'`
    perl_inst=0
    for rut in $mypath
    do
        if [ -x "${rut}/perl" ]
        then
            perlv=`perl -v|grep v[5-9]`
            if [ "$perlv" != "" ]
            then
                perl_inst=1;
            fi
            break
        fi
    done
    if [ $perl_inst == 0 ]
    then
        echo "***************************************************************"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" E;cat temp
        echo "* Para instalar POSTULA es necesario contar previamente con   *"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" E;cat temp
        echo "* Perl 5 o superior instalado.                                *"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" E;cat temp
        echo "* Efectúe su instalación e inténtelo nuevamente.              *"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" E;cat temp
        echo "***************************************************************"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" E;cat temp
        fin 1
    fi
}

# Muestra información acerca de algunos directorios predefinidos, 
# no modificables
function mostrar_info() {
    echo "Todos los directorios del sistema de postulantes serán subdirectorios de $grupo."|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
    echo "Todos los componentes de la instalación se obtendrán del repositorio: $grupo/inst."|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
    ls "$grupo/inst" --hide temp|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
    echo "El archivo de configuración y el log de la instalación se registrarán en: $grupo/conf."|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
}

# Pide definir los directorios para ejecutables (BINDIR) y de arribos (ARRIDIR)
function def_dir() {
    tmpbin=""
    tmparri=""
    tmpdatasize=0
    echo "Ingrese el nombre del subdirectorio de ejecutables ($BINDIR)"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
    read tmpbin
    ./gralog.sh "$NOM_INSTULA" "$tmpbin" I
    if [ ! -z $tmpbin  ]
    then
        BINDIR=$tmpbin
    fi

    echo "Ingrese el nombre del directorio que permite el arribo de archivos externos ($ARRIDIR)"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
    read tmparri
    ./gralog.sh "$NOM_INSTULA" "$tmparri" I
    if [ ! -z $tmparri ]
    then
        ARRIDIR=$tmparri
    fi
}

# Pregunta por el espacio mínimo para arribos y chequea que haya suficiente 
# espacio
function espacio_min_arri() {
    echo "Ingrese el espacio mínimo requerido para datos externos (en Mbytes): $DATASIZE"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
    read tmpdatasize
    ./gralog.sh "$NOM_INSTULA" "$tmpdatasize" I
    if [ ! -z "$tmpdatasize" ]
    then
        #validar que sea numero...
        checksize=`echo $tmpdatasize|sed 's/^[0-9]*$/valido/'`
        if [ "$checksize" == "valido" ]
        then
        DATASIZE=$tmpdatasize
        else
            echo "No válido."|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
            return 1 #SI PASA ESTO, REPETIR EL PEDIDO
        fi
    fi

    if [ ! -d "$grupo/$ARRIDIR" ]
    then
        mkdir -p "$grupo/$ARRIDIR"
    fi

    arridisp=( `df "$grupo/$ARRIDIR"|grep /` )
    min=`expr $DATASIZE \* 1024`
 
    if [ ${arridisp[3]} -lt $min ]
    then
        echo "ERROR!"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
        echo "Insuficiente espacio en disco."|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
        echo "Espacio disponible en $ARRIDIR `expr ${arridisp[3]} / 1024` Mb"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
        echo "Espacio requerido $DATASIZE Mb"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
        return 2 #SI PASA ESTO, REPETIR EL PEDIDO
    fi
    return 0 # operacion exitosa
}

# Configura el directorio para logs y su extensión
function def_log_param() {
    echo "Ingrese el nombre del directorio de log: ($LOGDIR_REAL)"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
    read tmplogdir
    ./gralog.sh "$NOM_INSTULA" "$tmplogdir" I 
    if [ ! -z "$tmplogdir" ]
    then
        LOGDIR_REAL=$tmplogdir
    fi
    
    echo "Ingrese la extensión para los archivos de log: ($LOGEXT_REAL)"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
    read tmplogext
    ./gralog.sh "$NOM_INSTULA" "$tmplogext" I
    if [ ! -z "$tmplogext" ]
    then
        LOGEXT_REAL=$tmplogext
    fi
    logsizeinvalido=1
    while [ $logsizeinvalido != 0 ]
    do
        def_logsize # llama a la función para definir tamaño máximo de logs
        logsizeinvalido=$?
        if [ $logsizeinvalido != 0 ]
        then
            echo "Tamaño de log inválido."|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" E;cat temp
        fi
    done
}

# Define el tamaño máximo para los archivos de log
function def_logsize() {
    echo "Ingrese el tamaño máximo para los archivos $LOGEXT_REAL (en Kbytes): $LOGSIZE"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
    read tmplogsize
    ./gralog.sh "$NOM_INSTULA" "$tmplogsize" I
    if [ ! -z "$tmplogsize" ]
    then
        #validar que sea numero...
        checksize=`echo $tmplogsize|sed 's/^[0-9]*$/valido/'`
        if [ $checksize == "valido" ]
        then
        LOGSIZE=$tmplogsize
        else
            echo "No es un número."|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
            return 1 #SI PASA ESTO, REPETIR EL PEDIDO
        fi
    fi
    return 0
}

# Muestra los parámetros de la instalación y pide confirmar si son correctos
function mostrar_param(){
    echo "***************************************************************"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
    echo "* Parámetros de Instalación del paquete POSTULA               *"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
    echo "***************************************************************"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
    echo "* Directorio de trabajo: $grupo                               *"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
    echo "* Directorio de instalación: $grupo/inst                      *"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
    echo "* Directorio de configuración: $grupo/conf                    *"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
    echo "* Directorio de datos: $grupo/data                            *"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
    echo "* Librería de ejecutables: $grupo/$BINDIR                     *"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
    echo "* Directorio de arribos: $grupo/$ARRIDIR                      *"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
    echo "* Espacio mínimo reservado en $ARRIDIR: $DATASIZE MB         *"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
    echo "* Directorio para los archivos de Log: $grupo/$LOGDIR_REAL                *"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
    echo "* Extensión para los archivos de Log: $LOGEXT_REAL                 *"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
    echo "* Tamaño máximo para cada archivo de Log: $LOGSIZE KB         *"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
    echo "* Log de la instalación: $grupo/conf/Instula.log              *"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
    echo "*                                                             *"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
    echo "* Si los datos ingresados son correctos oprima solo ENTER     *"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
    echo "* para iniciar la instalación. Si desea modificar alguno de   *"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
    echo "* ellos oprima cualquier tecla.                               *"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
    echo "***************************************************************"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
    
    read -n 1 key
    if [ "$key" = "" ]
    then
        return 0 # se presionó enter
    else
        echo
        return 1 # no se presionó enter
    fi
}

# Último pedido de confirmación antes de instalar
function confirmar_inst() {
    echo "Iniciando Instalación... ¿Está UD. seguro? (Si/No)"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
    read confirma
    ./gralog.sh "$NOM_INSTULA" "$confirma" I
    if [ "$confirma" == "Si" ]
    then
        instalar # llamar a la instalación propiamente dicha
    elif [ "$confirma" == "No" ]
    then
        fin 3;
    else
        echo "Por favor, ingrese Si o No."|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
        confirmar_inst
    fi
}

# Realiza el movimiento de archivos a los lugares que corresponden
function instalar() {
    echo -n "Creando estructuras de directorio."|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
    mkdir -p "$grupo/$BINDIR" 2> /dev/null
    echo -n "."|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
    mkdir -p "$grupo/$ARRIDIR" 2> /dev/null
    echo -n "."|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
    mkdir -p "$grupo/$LOGDIR_REAL" 2> /dev/null
    echo -n "."|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
    mkdir -p "$grupo/recibidos" 2> /dev/null
    echo -n "."|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
    mkdir -p "$grupo/rechazados" 2> /dev/null
    echo -n "."|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
    mkdir -p "$grupo/nuevos" 2> /dev/null
    echo "."|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
    mkdir -p "$grupo/list" 2> /dev/null
    echo "."|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
    mkdir -p "$grupo/procesados" 2> /dev/null

    # Mover scripts
    echo -n "Instalando..."
    cp "$grupo/inst/$NOM_POSTINI" "$grupo/$BINDIR"  2> /dev/null
    check_inst $NOM_POSTINI
    echo -n "."|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
    cp "$grupo/inst/$NOM_POSTONIO" "$grupo/$BINDIR" 2> /dev/null
    check_inst $NOM_POSTONIO
    echo -n "."|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
    cp "$grupo/inst/$NOM_POSTULAR" "$grupo/$BINDIR" 2> /dev/null
    check_inst $NOM_POSTULAR
    echo -n "."|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
    cp "$grupo/inst/$NOM_POSTLIST" "$grupo/$BINDIR" 2> /dev/null
    check_inst $NOM_POSTLIST
    echo -n "."|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
    cp "$grupo/inst/$NOM_MOVER" "$grupo/$BINDIR" 2> /dev/null
    check_inst $NOM_MOVER
    echo -n "."|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
    cp "$grupo/inst/$NOM_GRALOG" "$grupo/$BINDIR" 2> /dev/null
    check_inst $NOM_GRALOG
    echo -n "."|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
    cp "$grupo/inst/$NOM_START" "$grupo/$BINDIR" 2> /dev/null
    check_inst $NOM_START
    echo "."|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
    cp "$grupo/inst/$NOM_STOP" "$grupo/$BINDIR" 2> /dev/null
    check_inst $NOM_STOP
}

# verifica si la instalación se realizó correctamente
# parámetro: ruta a chequear
function check_inst(){
    scriptachequear=$1
    if [ ! -x "$grupo/$BINDIR/$scriptachequear" ]
    then
        echo "Error al instalar $scriptachequear." >&2
        ./gralog.sh "$NOM_INSTULA" "Error al instalar $scriptachequear." SE
        fin 1
    fi
}

# Escribe información necesaria en instula.conf
function guardar_info() {
    echo "CURRDIR = $grupo" > "$CONFFILE"
    echo "CONFDIR = $grupo/conf" >> "$CONFFILE"
    echo "BINDIR = $grupo/$BINDIR" >> "$CONFFILE"
    echo "ARRIDIR = $grupo/$ARRIDIR" >> "$CONFFILE"
    echo "DATASIZE = $DATASIZE" >> "$CONFFILE"
    echo "LOGDIR = $grupo/$LOGDIR_REAL" >> "$CONFFILE"
    echo "LOGEXT = $LOGEXT_REAL" >> "$CONFFILE"
    echo "MAXLOGSIZE = $LOGSIZE" >> "$CONFFILE"
    echo "USERID = $USERID" >> "$CONFFILE"
    FECINS=`date`
    echo "FECINS = `date`" >> "$CONFFILE"
}

# muestra el resultado de una instalación correcta
function mostrar_resumen() {
    echo "***************************************************************"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
    echo "* Se encuentran instalados los siguientes componentes:        *"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
    echo "* POSTINI $FECINS $USERID                                     *"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
    echo "* POSTONIO $FECINS $USERID                                    *"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
    echo "* POSTLIST $FECINS $USERID                                    *"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
    echo "* POSTULAR $FECINS $USERID                                    *"|tee temp|./gralog.sh "$NOM_INSTULA" "`cat -`" I;cat temp
    fin 0
}

# maneja la etapa de definición de parámetros
function def_param(){ 
    def_dir 
    #espacio_min_arri debe repetirse hasta que sea valido
    espacio_min_arri
    while [ $? != 0 ]
    do
        espacio_min_arri
    done
    ########################################################    
    def_log_param
    mostrar_param
    ret=$?
    return $ret
}


# flujo principal
function main(){
    init_log
    verif_instalacion_previa
    licencia
    perlchk
    mostrar_info
    def_param
    # Repetir hasta que se acepten los parámetros ingresados
    while [ $? != 0 ]
    do
        def_param
    done
    ########################################################
    confirmar_inst
    guardar_info
    mostrar_resumen
}

main # Llama al flujo principal
